package pe.edu.upc.e41a.javasoft.service;

import java.util.List;

import javax.annotation.Resource;
import javax.persistence.TypedQuery;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import pe.edu.upc.e41a.javasoft.dao.PublicacionDao;
import pe.edu.upc.e41a.javasoft.domain.Publicacion;

@Service
@Transactional
public class PublicacionServiceImpl implements PublicacionService{

	@Resource
	private PublicacionDao publicacionDao;
	

	@Override
	public String registrarPublicacion(Publicacion publicacion) {
		
		String mensaje =null;
		try {
			mensaje = ValidaPublicacion(publicacion);
			if(mensaje!=null) return mensaje;
			publicacionDao.savePublicacion(publicacion);	
			mensaje="La publicación se registró exitosamente";
		} catch (Exception e) {
			mensaje="Error al registrar publicación";
			return mensaje;
		}
		
		return mensaje;
	}
	
	private String ValidaPublicacion(Publicacion publicacion){
		String mensaje=null;
		if (publicacion.getCategoria()==null) {
			mensaje="La categoria de la publicación no puede ser Nulo";
		} 
		else if (publicacion.getUsuario()==null) {
			mensaje="El usuario de la publicación no puede ser Nulo";
		}
		else if (publicacion.getTitulo()==null) {
			mensaje="El titulo de la publicación no puede ser Nulo";
		}
		else if (publicacion.getDescripcion()==null) {
			mensaje ="La descripción de la publicación no puede ser Nulo";
		} 
		else if (publicacion.getTipo()==null) {
			mensaje ="El tipo de la publicación no puede ser Nulo";
		} 
		else if (publicacion.getCantidad()==null) {
			mensaje ="La cantidad de la publicación no puede ser Nulo";
		} 
		else if (publicacion.getPrecio()==null) {
			mensaje ="el precio de la publicación no puede ser Nulo";
		}
		else if (publicacion.getFechaCreacion()==null) {
			mensaje ="La fecha de la publicación no puede ser Nulo";
		}
		else if (publicacion.getDuracion()==null) {
			mensaje ="La duarcion de la publicación no puede ser Nulo";
		}
		else if (publicacion.getEstado()==null) {
			mensaje ="El estado de la publicación no puede ser Nulo";
		} 
		
		return mensaje;
	}
	
		
	@Override
	public List<Publicacion> listarPublicacionPorTituloODescripcion(
			String cadena) {
		List<Publicacion> lista;
		lista=publicacionDao.listarPublicacionPorTituloODescripcion(cadena);
		return lista;
	}
	
	@Override
	public TypedQuery<Publicacion> MostrarPublicacion(Integer IdPublicacion) {

		TypedQuery<Publicacion> publicacion = publicacionDao
				.MostrarPublicacion(IdPublicacion);
		publicacion.getSingleResult();
		
	return publicacion;
		
	}

	@Override
	public String actualizarEstadoPublicacion(Publicacion publicacion) {
		String mensaje = null;
		try {
			publicacionDao.updatePublicacion(publicacion);
			mensaje = "El estado de la publicación se actualizo exitosamente";
		} catch (Exception e) {
			mensaje = "Error al actualizar estado de publicación";
			return mensaje;
		}

		return mensaje;
	}



	


}
